package com.sky.controller.admin;

import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

    public static final String KEY = "SHOP_STATUS";

    //使用RedisTemplate操作redis，因为redisTemplate已经注入到spring容器中
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 设置店铺的营业状态
     * 通过接收一个状态码来更新店铺的营业状态，状态码1表示营业中，其他值表示打烊中
     * 使用@PutMapping注解来处理HTTP PUT请求，并通过@ApiOperation注解来说明方法的作用
     *
     * @param status 店铺的营业状态，1表示营业中，其他值表示打烊中
     * @return 返回一个Result对象，表示操作的结果
     */
    @PutMapping("/{status}")
    @ApiOperation("设置店铺的营业状态")
    public Result setStatus(@PathVariable Integer status){
        // 日志记录，记录店铺的营业状态变更，使用条件运算符根据status值输出不同的状态描述
        log.info("设置店铺的营业状态为：{}",status == 1 ? "营业中" : "打烊中");

        // 使用Redis存储营业状态，以便其他部分的代码可以检查店铺是否正在营业
        // 这里使用redisTemplate的操作对值进行设置，KEY为固定键名，status为营业状态值
        redisTemplate.opsForValue().set(KEY,status);

        // 返回成功结果，表示营业状态设置成功
        return Result.success();
    }

    /**
     * 获取店铺的营业状态（管理端查询营业状态）
     * 本方法通过GET请求访问/status路径，从Redis缓存中获取店铺的营业状态信息
     * 主要用于管理端实时了解店铺当前是否处于营业状态
     *
     * @return 返回一个Result对象，其中包含店铺的营业状态代码（1代表营业中，0代表打烊中）
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        // 从Redis中获取店铺的营业状态
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        // 记录店铺的营业状态信息
        log.info("获取到店铺的营业状态为：{}",status == 1 ? "营业中" : "打烊中");
        // 返回店铺的营业状态
        return Result.success(status);
    }

}